package com.project.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.project.bean.BuyOrderBean;
import com.project.bean.ProductBean;
import com.project.bean.SellOrderBean;

import java.util.List;

public interface IProductService {

    /**
     * 添加商品
     * 前端输入商品编号、失去焦点触发商品的findById，判断产品是否存在，存在返回update，不存在返回add，并返回商品信息
     * 有两个mapper
     * 处理：判断操作的值，如果是update，那么判断该采购车中是否存在该商品，
     *
     * 如果存在，则修改采购车中的采购数量（累加）；
     *
     * 如果不存在，在采购车中添加采购商品。
     *
     * 如果是add，则完成库存商品的添加，（库存数量为0，采购价为null，销售价为null）
     *
     * 采购车添加该商品的记录。
     * @param product   产品对象
     * @param userId   当前登录用户的id
     * @param num   采购数量
     * @param flag  判断条件/“add”、"update"
     */
    void  addProduct(ProductBean product,Integer userId,Integer num,String flag);

    /**
     * 根据购物车id，判断购物车是否存在，如果存在返回字符串--不用写
     * @param buyCarId
     * @return
     */
    String findByBuyCarId(Integer buyCarId);

    /**
     * 入库
     * 1、添加采购订单
     *2、按采购员的id（登录用户session）查询采购车
     *3、遍历采购车，循环添加采购明细信息。循环修改库存商品的数量（累加），以及最新采购价格
     *4、根据采购员id清空购物车
     * @param supplierName  供应商名字
     * @param loginUserId   登录用户id
     */
    void InStorage(String supplierName,Integer loginUserId);


    /**
     * 添加库存中的商品，到销售车中
     * 添加产品时，出库数量默认为1，判断该商品在销售车中是否存在，如果存在，则数量+1；如果不存在，则新增销售车商品
     * 也不需要判断，早库存中的
     * @param productId 产品id
     * @param loginUserId   登录用户id
     */
    void  addProductInSellCar(String productId,Integer loginUserId);

    /**
     * 出库
     * 下面的sellcar根据用户id展示
     * 1、添加销售基本信息
     *2、根据销售员id查询销售车信息集合
     *3、遍历销售车集合，循环添加销售的明细，循环修改库存数量（累减）
     *4、根据销售员的id清空销售车
     * @param sellOrderBean 销售订单对象
     * @param loginUserId
     */
    void OutStorage(SellOrderBean sellOrderBean,Integer loginUserId);

    /**
     * 分页动态查询库存表
     * @param pageNO    页码
     * @param productName   产品名字
     * @param productType 产品类型
     * @param isPrice   定销价格
     * @param startNum  开始数量
     * @param endNum    结束数量
     * @return
     */
    public IPage<ProductBean> findStorageByItem(Integer pageNO,String productType, String productName, Integer isPrice, Integer startNum, Integer endNum) ;


    /**
     * 查询库存对象
     * @param inStorageProductId    已入库的产品id
     * @return
     */
    ProductBean findProductByInStorage(Integer inStorageProductId);

    /**
     * 修改销售价格
     * 通过库存商品id修改销售价格
     * @param productId 库存商品id
     * @param newPrice  新销售价格
     */
    void updateInStorageProductPrice(String productId,Integer newPrice);

    /**
     * 获取产品对象中，各种类型
     * @return
     */
    List<ProductBean> findProductType();

}
